import argparse
import sys
import re
from pathlib import Path

class WordCounter:
    """文本计数器核心类 - 基础功能"""
    
    def __init__(self):
        self.stats = {}
    
    def analyze_text(self, text):
        """
        分析文本并统计基础指标
        
        Args:
            text (str): 要分析的文本内容
        """
        self.stats = {
            'characters': self._count_characters(text),
            'words': self._count_words(text),
            'sentences': self._count_sentences(text),
            'lines': self._count_lines(text),
        }
    
    def _count_characters(self, text):
        """统计字符数（包括空格）"""
        return len(text)
    
    def _count_words(self, text):
        """统计单词数（基于空格和标点分隔）"""
        # 使用正则表达式分割单词，考虑多种分隔符
        words = re.findall(r'\b\w+\b', text)
        return len(words)
    
    def _count_sentences(self, text):
        """统计句子数"""
        # 基于句号、问号、感叹号分割句子
        sentences = re.split(r'[.!?]+', text)
        # 过滤空句子
        sentences = [s.strip() for s in sentences if s.strip()]
        return len(sentences)

def read_file(file_path):
    """
    读取文件内容
    
    Args:
        file_path (str): 文件路径
        
    Returns:
        str: 文件内容
    """
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            return file.read()
    except UnicodeDecodeError:
        # 尝试其他编码
        try:
            with open(file_path, 'r', encoding='gbk') as file:
                return file.read()
        except Exception as e:
            print(f"错误：无法读取文件 '{file_path}' - {e}")
            sys.exit(1)
    except FileNotFoundError:
        print(f"错误：文件 '{file_path}' 未找到")
        sys.exit(1)
    except Exception as e:
        print(f"错误：读取文件时发生错误 - {e}")
        sys.exit(1)

def print_basic_results(stats):
    """打印基础统计结果"""
    print("\n 文本统计结果 (基础功能):")
    print("=" * 40)
    print(f"字符数: {stats['characters']}")
    print(f"单词数: {stats['words']}")
    print(f"句子数: {stats['sentences']}")
    print("=" * 40)

def main():
    """主函数 - v0.2 基础功能版本"""
    parser = argparse.ArgumentParser(
        description='Word Count Tool v0.2 - 文本计数统计程序 (基础功能)',
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
使用示例:
  python wc.py -c example.txt          # 统计字符数
  python wc.py -w document.txt         # 统计单词数  
  python wc.py -s essay.txt            # 统计句子数
        """
    )
    
    # 基础功能参数
    parser.add_argument('-c', '--chars', action='store_true', 
                       help='统计字符数')
    parser.add_argument('-w', '--words', action='store_true', 
                       help='统计单词数')
    parser.add_argument('-s', '--sentences', action='store_true', 
                       help='统计句子数')
    parser.add_argument('filename', help='要分析的文件路径')
    
    args = parser.parse_args()
    
    # 检查文件是否存在
    if not Path(args.filename).exists():
        print(f"错误：文件 '{args.filename}' 不存在")
        sys.exit(1)
    
    try:
        # 读取文件
        content = read_file(args.filename)
        
        if content is None:
            print(f"错误：无法读取文件 '{args.filename}'")
            sys.exit(1)
        
        # 创建计数器并分析文本
        counter = WordCounter()
        counter.analyze_text(content)
        
        # 根据参数输出结果
        if args.chars:
            print(f"字符数: {counter.stats['characters']}")
        elif args.words:
            print(f"单词数: {counter.stats['words']}")
        elif args.sentences:
            print(f"句子数: {counter.stats['sentences']}")
        else:
            # 默认显示所有基本信息
            print_basic_results(counter.stats)
            
    except Exception as e:
        print(f"程序执行出错: {e}")
        sys.exit(1)

if __name__ == '__main__':
    main()